package com.octopus.core.scheduler;

import com.octopus.core.OctopusListener;
import com.octopus.core.Request;

/**
 * 爬虫任务调度器。主要负责任务存储和消费。
 *
 * <p>扩展此接口可以实现从数据库或本地文件加载任务
 *
 * @see DefaultScheduler
 * @author shoulai.yang@gmail.com
 * @date 2019/07/31
 */
public interface Scheduler extends OctopusListener {

  /**
   * 添加任务
   *
   * @param request 任务
   * @return true添加成功，false添加失败
   */
  boolean add(Request request);

  /**
   * 获取一个请求
   *
   * @return 如果没有请求，返回null
   */
  Request get();

  /**
   * 获取剩余请求数目
   *
   * @return 剩余请求数目
   */
  int remaining();

  /**
   * 判断当前任务是否已经访问过
   *
   * @param request 任务
   * @return true or false
   */
  boolean visited(Request request);

  /**
   * 标记当前任务已经被访问过
   *
   * @param request 任务
   */
  void visit(Request request);
}
